// 定义检索状态的div对象
var mask;
/**
 * 置为结束检索状态
 */
function overLoad() {
    // 移除检索状态效果
    $(mask).remove();
    $("#loaddata").css("display", "none");
}
(function($) {
    /**
     * 带令牌提交表单
     */
    $.fn.submitExtA = function(options) {
        submitExt(options, true, this);
    }
    /**
     * 不带令牌提交表单
     */
    $.fn.submitExtB = function(options) {
        submitExt(options, false, this);
    }
    /**
     * 带令牌ajax提交表单
     */
    $.fn.ajaxSubmitExtA = function(options, loadingFlag) {
        ajaxSubmitExt(options, true, this, loadingFlag);
    }
    /**
     * 不带令牌ajax提交表单
     */
    $.fn.ajaxSubmitExtB = function(options, loadingFlag) {
        ajaxSubmitExt(options, false, this, loadingFlag);
    }
    /**
     * ajax请求重新封装
     */
    $.extend({
        // 带令牌请求
        ajaxExtA : function(options) {
            ajaxExt(options, true);
        },
        // 不带令牌请求
        ajaxExtB : function(options) {
            ajaxExt(options, false);
        }
    });
    function ajaxExt(options, isRefToken) {
        // 定义令牌
        var token = "";
        // 是否需要令牌验证
        if (isRefToken) {
            // 如果需要令牌验证,则将令牌数据追加到请求参数中
            token = $("#tokenName").val();
        }
        else {
            // 如果不需要令牌验证,则将代理令牌数据追加到请求参数中
            token = "N6UKYC6SH67QTPB0FMPN964WAZLY7HU8";
        }
        // 取得请求参数
        var dataExt = options.data == null || options.data.length == 0 ? {} : options.data;
        // 追加令牌参数
        dataExt = $.extend(dataExt, {
            tokenName : token,
            isAjax : true
        });
        // 重新设置参数对象
        options.data = dataExt;
        // 处理ajax请求带回的令牌
        // 取得ajax请求成功的回调函数
        var callBack = options.success == null ? function() {
        } : options.success;
        // 取得ajax请求的返回数据类型
        var dataType = options.dataType;
        // 设置请求类型为默认类型
        options.dataType = null;
        // 设置回调函数指向当前方法
        options.success = function(result) {
            if (isRefToken) {
                // 处理令牌数据后,将数据返回到调用处
                var newToken = result.substring(0, 32);
                // 将新令牌设置到画面
                $("#tokenName").val(newToken);
                // 取得数据
                result = result.substring(32, result.length);
            }
            // 如果返回的错误提示信息,则不再进入回调涵数
            if (options.check) {
                try {
                    if (parseJSON(result).type == "error") {
                        show_info(
                            getMessagePosition(options.pageType).right,
                            getMessagePosition(options.pageType).width,
                            2,
                            parseJSON(result).eoFields,
                            options.pageType
                        );
                        callBack = function() {
                        };
                    }
                    else {
                        throw e;
                    }
                }
                catch (e) {
                    show_info(
                        getMessagePosition(options.pageType).right,
                        getMessagePosition(options.pageType).width,
                        1,
                        options.successInfo,
                        options.pageType
                    );
                }
            }
            // 如果画面超时过期,
            if (result.indexOf("invalidTokenFlag") != - 1) {
                // alert("该页面已经过期，不能提交！");
                $("#tokenName").val("");
                window.location.href = "invalidation.jsp";
            }
            // 抛出系统异常 给出提示信息
            else if (result.indexOf("AjaxExceptionFlag") != - 1) {
                $("#tokenName").val("");
                window.location.href = "exception.jsp";
            }
            // 如果没有权限时,返回到登陆页
            else if (result.indexOf("loginFlag") != - 1) {
                window.location.href = "login.jsp";
            }
            // 如果未指定返回数据类型则直接返回数据
            else if (dataType == null || dataType == 'undefined') {
                callBack(result);
            }
            // 如果指定了返回数据类型为json则转换数据为json类型后返回数据
            else if (dataType == "json") {
                callBack(parseJSON(result));
            }
            else {
                callBack(result);
            }
        }
        $.ajax(options);
    }
    var parseJSON = $.parseJSON || function(data) {
        return window['eval']('(' + data + ')');
    };
    /**
     * ajax提交表单重新封装
     */
    function ajaxSubmitExt(options, isRefToken, formObj, loadingFlag) {
        // 原token值
        var srcToken = $("#tokenName").val();
        if ($("input[name='isAjax']").length == 0) {
            // 设置请求方式为ajax
            $(formObj).append('<input type="hidden" name="isAjax" value="true" />');
        }
        // 是否需要令牌验证
        if (isRefToken) {
            if ($("input[name='tokenName']").length > 1) {
                $(formObj).find("#tokenName").remove();
            }
            // 如果需要令牌验证,则将令牌标签追加到该form中
            $(formObj).append($("#tokenName"));
        }
        else {
            if ($("input[name='tokenName']").length > 1) {
                $(formObj).find("#tokenName").remove();
            }
            // 如果不需要令牌验证,则将代理令牌标签追加到该form中
            $(formObj).append($("#tokenName").val("N6UKYC6SH67QTPB0FMPN964WAZLY7HU8"));
        }
        error = function() {
            alert("请求失败或超时，请稍后再试！");
            overLoad();
        }
        /**
         * 置为正在检索状态
         */
        function startLoad() {
            // 为前台添加 进度条样式
            if (loadingFlag == 1) {
                // 遮挡层的高度 update by 党波 2012-05-21
                $(".proBg").css("height", $(document).height());
                // 设置高度
                $(".proBar").css("top", ($(document).height() / 2) - 15);
                // 设置宽度
                $(".proBar").css("left", ($(document).width() / 2) - 152);
                $("#loaddata").css("display", "block");
            }
            // 为后台添加 进度条样式
            else if (loadingFlag == 2) {
                $("#loaddata").css("display", "");
                // 遮挡层的高度 update by 党波 2012-05-24
                $(".proBg").css("height", $(".mainLeft").height());
                // 设置高度
                $(".proBar").css("top", ($(".mainLeft").height() / 2) - 15);
                // 设置宽度
                $(".proBar").css("left", ($(document).width() / 2) - 152);
            }
            else {
                // 创建检索状态的控件
                mask = document.createElement('div');
                // 为控制填加样式
                $(mask).addClass("loaddata_mask");
                // 设置高度
                $(mask).css("height", $(document).height());
                // 显示检索状态效果
                $("body").append(mask);
            }
        }
        // 如果传入参数是方法,则直接赋值,如果不是方法,则取得options中的success属性
        var paramSeccess = null;
        if (typeof options == 'function') {
            paramSeccess = options;
            options = {
                success : beforeSeccess
            };
        }
        else {
            paramSeccess = options.success;
            options.success = beforeSeccess;
        }
        // 自定义回调函数 用来在每个回调之前判断是否出现异常
        function beforeSeccess(result) {
            if (isRefToken) {
                // 处理令牌数据后,将数据返回到调用处
                var newToken = result.substring(0, 32);
                // 将新令牌设置到画面
                $("#tokenName").val(newToken);
                // 取得数据
                result = result.substring(32, result.length);
            }
            else {
                $("#tokenName").val(srcToken);
            }
            // 抛出系统异常 给出提示信息
            if (result.indexOf("AjaxExceptionFlag") != - 1) {
                alert("系统出现异常！处理失败！");
                overLoad();
            }
            // 如果画面超时过期,
            else if (result.indexOf("invalidTokenFlag") != - 1) {
                // alert("该页面已经过期，不能提交！");
                $("#tokenName").val("");
                window.location.href = "invalidation.jsp";
            }
            // 如果没有权限时,返回到登陆页
            else if (result.indexOf("loginFlag") != - 1) {
                window.location.href = "login.jsp";
            }
            // 没有异常的情况下 调用真实回调函数 判断Ajax异常标识是否存在
            else {
                // 如果返回的错误提示信息,则不再进入回调涵数
                if (options.check) {
                    try {
                        if (parseJSON(result).type == "error") {
                            show_info(
                                getMessagePosition(options.pageType).right,
                                getMessagePosition(options.pageType).width,
                                2,
                                parseJSON(result).eoFields,
                                options.pageType
                            );
                            paramSeccess = function() {
                            };
                            overLoad();
                        }
                        else {
                            throw e;
                        }
                    }
                    catch (e) {
                        show_info(
                            getMessagePosition(options.pageType).right,
                            getMessagePosition(options.pageType).width,
                            1,
                            options.successInfo,
                            options.pageType
                        );
                    }
                }
                paramSeccess(result);
                if (! options.is_forward) {
                    // 判断是否为错误或者成功后不需跳转,如果是直接去除遮掩效果
                    if (result == "error" || result == "success") {
                        overLoad();
                    }
                }
            }
        }
        // 追加ajax开始请求和结束请求函数
        options = $.extend(true, {}, {
            beforeSend : startLoad,
            error : error
        }, options);
        $(formObj).ajaxSubmit(options);
    }
    /**
     * 表单提交重新封装
     */
    function submitExt(options, isRefToken, formObj) {
        // 移除请求类型(ajax)
        $("input[name='isAjax']").remove();
        var srcToken = $("#tokenName").val();
        // 是否需要令牌验证
        if (isRefToken) {
            if ($("input[name='tokenName']").length > 1) {
                $(formObj).find("#tokenName").remove();
            }
            // 如果需要令牌验证,则将令牌标签追加到该form中
            $(formObj).append($("#tokenName"));
        }
        else {
            if ($("input[name='tokenName']").length > 1) {
                $(formObj).find("#tokenName").remove();
            }
            // 如果不需要令牌验证,则将代理令牌追加到该form中
            $(formObj).append($("#tokenName").val("N6UKYC6SH67QTPB0FMPN964WAZLY7HU8"));
        }
        if (typeof options == 'function') {
            $(formObj).submit(options);
        }
        else {
            $(formObj).submit();
        }
        $("#tokenName").val(srcToken);
    }
})(jQuery);
/**
 * 根据画面类型取得显示提示信息层的位置
 * @param page_type 1：前台画面、2：后台设定画面、3：我的帐户画面、4：哥伦布后台画面
 * @return json rigth：距右边的距离、width：显示信息层的宽度
 */
function getMessagePosition(page_type) {
    // 定义距右距离、宽度
    var right, width;
    switch (page_type) {
        // 前台画面
        case 1 :
            right = (document.body.offsetWidth - $(".mainContent").width()) / 2;
            width = $(".mainContent").width() - 2;
            break;
        // 后台设定画面
        case 2 :
            right = (document.body.offsetWidth - $(".mWrap").width()) / 2;
            width = $(".mainRight").width() - 2;
            break;
        // 我的帐户画面
        case 3 :
            // TODO
            right = (document.body.offsetWidth - $(".areaConA").width()) / 2;
            width = $(".conRight").width() - 2;
            break;
        // 哥伦布后台画面
        case 4 :
            right = (document.body.offsetWidth - $(".mWrap").width()) / 2;
            width = $(".mainRight").width() - 2;
            break;
        default :
            break;
    }
    return {
        right : right,
        width : width
    };
}
/**
 * 显示提示信息层
 * @param right 距画面右侧的距离
 * @param width 显示提示信息层的宽度
 * @param show_type 显示提示层的类型 1：成功、2：错误
 * @param show_message 提示信息
 * @return 无
 * @author 闫冬 2012-03-01
 */
function show_info(right, width, show_type, show_message, pageType) {
    // 根据传入的show_type设置提示层的样式名称
    switch (show_type) {
        case 1 :
            if (pageType == '1') {
                return;
            }
            // 弹出成功提示层
            $("body").successDialog();
            // 移除红色背景
            $(".msgredborder").removeClass("msgredborder");
            // 移除错误提示信息
            $("span[class=msgred]").remove();
            break;
        case 2 :
            // 弹出错误提示层
            $("body").errorDialog();
            // 是否显示提示信息
            var messageFlag = true;
            // 显示的红框css后台样式
            var borderCss = "msgredborder";
            // 如果是前台页面则不显示提示信息只把错误地方标记红色
            if (pageType == '1') {
                // 不显示提示信息
                messageFlag = false;
                // 前台错误红框样式
                borderCss = "warnningRed";
            }
            className = "error";
            // 移除红色背景
            $(".msgredborder").removeClass("msgredborder");
            // 移除错误提示信息
            $("span[class=msgred]").remove();
            for (var index = 0; index < show_message.length; index++) {
                addMessageSubmit(
                    show_message[index].id,
                    show_message[index].infoMessage,
                    "msgred",
                    true,
                    messageFlag,
                    borderCss
                );
            }
            // 关闭检索层
            $(".loaddata_mask").remove();
            overLoad();
            break;
        default :
            break;
    }
    overLoad();
}
/**
 * 获取滚动条高度和位置(处理浏览器兼容问题)
 * @return js对象
 * @author 闫冬
 */
function scollPostion() {
    var t, l, w, h;
    // IE...
    if (document.documentElement && document.documentElement.scrollTop) {
        t = document.documentElement.scrollTop;
        l = document.documentElement.scrollLeft;
        w = document.documentElement.scrollWidth;
        h = document.documentElement.scrollHeight;
    }
    // Mozilla、Chrome...
    else if (document.body) {
        t = document.body.scrollTop;
        l = document.body.scrollLeft;
        w = document.body.scrollWidth;
        h = document.body.scrollHeight;
    }
    return {
        top : t,
        left : l,
        width : w,
        height : h
    };
}
/**
 * 给文本框增加提示信息
 * param id 文本框的id
 * param msg 提示信息
 * param style CSS样式
 * param borderFlag true 加红色边框 false 不加红色边框
 * param messageFlag 是否显示错误提示信息(true:加;false:不加)
 * param borderCss 错误红框样式
 */
function addMessageSubmit(id, msg, style, borderFlag, messageFlag, borderCss) {
    // 去掉灰色样式
    $('#' + id).removeClass("fH");
    $("#" + id).removeClass("msgredborder");
    $("#" + id).removeClass("borderBlue");
    var next = $("#" + id).next();
    if (next.attr("info") == "msgspan") {
        next.remove();
    }
    // 解决ie7下，验证通过不显示对号的bug
    if (msg == "") {
        msg = "&nbsp;";
    }
    // 如果显示提示信息flag为false则不显示
    if (messageFlag) {
        $("#" + id).after("<span info='msgspan' class='" + style + "'>" + msg + "</span>");
    }
    if (style == "msggreen") {
        $("#" + id).addClass("borderBlue");
    }
    if (borderFlag) {
        $("#" + id).removeClass("borderBlue");
        $("#" + id).addClass(borderCss);
    }
}